package ebj.common.document_create.helper;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.Image;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * 解决第X页/共Y页问题
 * <p>我们通过PdfWriter中的getPageNumber()函数获取当前是第几页，但是没有办法获取文档共多少页。
        我们可以利用XObject对象，iText仅在调用释放模板方法后才将PdfTemplate写入到OutputStream中，否则对象将一直保存在内存中，直到关闭文档。
       我们可以给第1个页面添加template，直到最后一个页面才将内容写入到这个模板。</p>
 * @author zhoushineyoung@hotmail.com
 * @time 2016年10月15日 上午11:16:16
 * @param <T>
 */
public class TableHeader extends PdfPageEventHelper{
    String header;
    PdfTemplate total;
    
    public void setHeader(String header){
     this.header=header;
    }
    
    @Override
    public void onOpenDocument(PdfWriter writer,Document document){
        total = writer.getDirectContent().createTemplate(30,16);
    }
    
    @Override
    public void onEndPage (PdfWriter writer, Document document) {
     PdfPTable table = new PdfPTable(3);
     try{
     table.setWidths(new int[]{24,24,2});
     table.setTotalWidth(527);
     table.setLockedWidth(true);
     table.getDefaultCell().setFixedHeight(20);
     table.getDefaultCell().setBorder(Rectangle.BOTTOM);

     table.addCell(header);
     table.getDefaultCell().setHorizontalAlignment(
     Element.ALIGN_RIGHT);
     table.addCell(String.format("page %d of",writer.getPageNumber()));
     PdfPCell cell = new PdfPCell(Image.getInstance(total));
     cell.setBorder(Rectangle.BOTTOM);
     table.addCell(cell);
     table.writeSelectedRows(0,-1,34,803,writer.getDirectContent());

     }
     catch(DocumentException de){
     throw new ExceptionConverter(de);
     }
    }
    
    @Override
    public void onCloseDocument(PdfWriter writer,Document document){
        ColumnText.showTextAligned(total,Element.ALIGN_LEFT,new Phrase(String.valueOf(writer.getPageNumber()-1)),2,2,0);
    
    }
}